Here's the scheme for sending the upload patch.  Same as NTSC, but different addresses.

Firstly, send 'patch.bin' to 80000340
Next, add these two codes to the Active Code List (see below)
D0025E13 0008
810003E2 F00D

Write 080000D0 to 8001308C
Write 24002B30 to 80013090


This patches it for multiplayer!
The MP patch still allows you to select solo stages.
The activators flip around UsetupjunZ and Ump_setupjunZ
Write 706A756E to 8004FCB0
Write 5A000000 to 8004FCB4
then, add these codes to the Active Code List (see below)
D0025E13 0008
810407AA FCA8
D0025E13 0008
8104082E FD38
D0025E13 000E
810407AA FD38
D0025E13 000E
8104082E FCA8
D0025E13 000E
810003E2 F00D

These allow you to upload setups for the level listed
Write B020 to 800325BA	/*BunkerI*/
Write B020 to 800325E6	/*Silo*/
Write B020 to 800325EE	/*Statue Park*/
Write B020 to 800325F2	/*Control*/
Write B020 to 800325F6	/*Archives*/
Write B020 to 800325FA	/*Train*/
Write B020 to 800325FE	/*Frigate*/
Write B020 to 80032602	/*BunkerII*/
Write B020 to 80032606	/*Aztec*/
Write B020 to 8003260A	/*Streets*/
Write B020 to 8003260E	/*Depot*/
Write B020 to 80032612	/*Complex*/
Write B020 to 80032616	/*Egyptian*/
Write B020 to 8003261A	/*Dam*/
Write B020 to 8003261E	/*Facility*/
Write B020 to 80032622	/*Runway*/
Write B020 to 80032626	/*Suface I*/
Write B020 to 8003262E	/*Temple*/
Write B020 to 80032632	/*Caverns*/
Write B020 to 80032636	/*Citadel*/
Write B020 to 8003263A	/*Cradle*/
Write B020 to 80032642	/*Surface II*/
Write B020 to 8003264A	/*Basement*/
Write B020 to 8003264E	/*Stacks*/
Write B020 to 80032656	/*Library*/
Write B020 to 8003265E	/*Caves*/
Write B020 to 8003266E	/*Cuba*/


As for sending a level, it's the same as it always was.
Upload the level to the same place as usual and then overwrite BAADF00D with 0.
  The new feature is that before uploading you can check if BAADF00D is written.  If it isn't, then the loop isn't going and you can keep them from uploading a few thousand of bytes over the menus ;*)
  Also, even if they used codes to write the upload routine (old or new!) it still works.

  Multiplayer doesn't need any special stuff to upload now.  You can switch between uploading solo and multiplayer levels without any trouble.


---------Active Code List
WARNING!  I'm assuming that the PAL rom only differs in the graphics department.  Cross your fingers...
Adding codes to the active code list isn't too nasty.
Read word at A07E9D60.  This lets you know how many active codes are already listed.
The list starts at A07E9D64.  To get to the next available address in the list, multiply the number of codes by six.
Write the code, then update the number of active codes.
Below is an example:


int AddActiveCode(unsigned long addy, unsigned short val)
  {unsigned long num;        /*number of codes in list*/

/*grab #codes currently in list*/
if (InitGSComms()) return -1;
	ReadWriteByte(1);
	ReadWrite32(0xA07E9D60);
	ReadWrite32(4);
	num=ReadWrite32(0);
	ReadWrite32(0);
	ReadWrite32(0);

/*write code*/
if (InitGSComms()) return -1;
   	ReadWriteByte(2);
    ReadWrite32(0xA07E9D64 + (num * 6));
    ReadWrite32(4);
    ReadWrite32(addy);
    ReadWrite32(0xA07E9D68 + (num * 6));
    ReadWrite32(2);
    ReadWrite16(val);
/*update number of codes in list*/
    ReadWrite32(0xA07E9D60);
    ReadWrite32(4);
    ReadWrite32(num+1);
	ReadWrite32(0);
	ReadWrite32(0);

  return num+1;}

